\subsection{Configurando o Ambiente}

\begin{figure}[!hb]
  \centering
%  \includegraphics[width=4in]{basico/imagens/configurando}
  \caption[Tipos no QLabel]%
  {Exemplo de Diferentes tipos sendo apresentados em um QLabel}
	\label{fig:config_ambiente}
\end{figure}

Supondo que você tem todos os programas que pedi para instalar na sessão de instalação deste livro, crie uma pasta vazia em um local onde você tenha permissão de escrita para começarmos.
o Qt precisa de uma pasta para cada aplicativo no modo normal de compilação, então é necessário uma pasta para cada exemplo do livro.
O primeiro exemplo terá o nome de ``inutil'', pois é o que ele é.

\subsection{Escrevendo o código}

dentro da pasta inutil, crie apenas um arquivo, main.cpp, que terá o seguinte conteudo.:

\begin{lstlisting}

#include <KApplication>
#include <KAboutData>
#include <KCmdLineArgs>
#include <KMessageBox>
 
int main (int argc, char *argv[])
{
    KAboutData aboutData("tutorial1", 0,
                         ki18n("Inutil"), "1.0",
                         ki18n("Mostra um Hello World em um popup"),
                         KAboutData::License_GPL,
                         ki18n("(c) 2007"),
                         ki18n("Nheh... "),
                         "http://tutorial.com/",
                         "submit@bugs.kde.org");
 
    KCmdLineArgs::init( argc, argv, &aboutData );
    KApplication app;
    KMessageBox::questionYesNo( 0, i18n( "Ola Mundo" ),
                                i18n( "Ola" ) );
    return 0;
}

\end{lstlisting}

\subsection{Explicando o Código}

estou ignorando sutilmente os includes, já que iremos passar pelas classes dentro do código.
A Primeira linha de código e já recebemos uma palavra-chave do KDE, \textbf{KAboutData}. Essa classe dá informações genéricas sobre o autor e informações do programa, que serão colocados no campinho ``ajuda->sobre''.  
os parâmetros que ela pega são : 

\begin{itemize}
	\item O Nome do programa usado internamente
	\item O Nome do catálogo (usualmente, 0 - Nome do programa)
	\item O nome do programa pra ser exibido na tela
	\item A Versão do programa
	\item Uma descrição do quê o aplicativo faz
	\item A licença que o programa está usando
	\item A mensagem de copyright ( ou copyleft ;p )
	\item Um texto opcional para ser exibido na caixa ``sobre''
	\item A Pagina do programa
	\item um E-mail para bugs
\end{itemize}

uff.... bastante coisa. Mas, mais uma vez, essa classe é usada apenas uma vez por aplicativo, e provavelmente um copiar-colar é mais rápido.

depois iniciamos o \emph{KCmdLineArgs}. Essa classe serve para manipular os argumentos de linha de comando, como por exemplo dizer ao programa para abrir um arquivo especifico. No exemplo, só iniciamos com os argv e argc padrões, e depois disso passamos a referência ao aboutData ( para --version e --author que o KCmdLineArgs te da de graça ).

o \emph{KApplication} é uma classe de controle, ela controla a lista de eventos ( por dentro do \emph{QApplication} ), provê a aplicação coisas padrões do KDE, como acesso a atalhos globais, menus padrão, objetos \emph{KConfig}, controle de sessão, invocação de ajuda... por fazer tanto controle dentro da aplicação, só pode ser criado um objeto desses em cada aplicativo.

Depois criarmos um KMessageBox com algum texto e exibimo-lo na tela. o primeiro parametro é um ponteiro para a tela que é dona do MessageBox, como não existem outras telas no programa, passamos zero. o segundo parâmetro é o texto que será exibido na tela, e o terceiro é o texto que será o titulo do MessageBox.

\subsection{Comparando com outro Toolkit}

Mas antes de compilar, se você acha que escrever essas 4 linhas de código para mostrar um ``Oi Mundo'' na tela foi uma boa piada de mal gosto, e que você deveria estar aprendendo algo mais fácil, acredite, o Qt é dos toolkits mais fáceis de se usar. irei comparar o código do nosso hello world em 4 linhas com o do GTK, que é o outro maior toolkit gráfico aberto.

\begin{lstlisting}
#include <gnome.h>
 
void hell_over(void) {
  gtk_main_quit();
}
 
int main(int argc, char *argv[]) {
  GtkWidget *window, *label;
  gnome_init("hell_world", VERSION, argc, argv);
  window = gnome_app_new("hell_world", "Hello World!");
  gtk_signal_connect(GTK_OBJECT(window), "delete_event", 
	GTK_SIGNAL_FUNC(hell_over), NULL);
  label = gtk_label_new("Hello World");
  gnome_app_set_contents(GNOME_APP(window), label);
  gtk_widget_show_all(window);
  gtk_main();
  return 0;
}
\end{lstlisting}

Eliminei todos os comentários para que possa caber no menor espaço possivel. esse é o código do hello world em Gnome retirado do site

http://www.metalshell.com/source\_code/56/Gnome\_Hello\_World.html.

Vejam que o código para Gnome é menor que um código básico para KDE, mas o do Gnome não possui partes de linha de comando nem informações extras que irão para a caixa ``sobre''. Por mais que eu queira também comparar o KDE-Qt com o windows.Forms, não irei fazer isso pois não quero colocar 80 linhas de código para criar uma janela com botão utilizando a API do windows.

\subsection{Compilando o código}

crie um arquivo chamado CMakeLists.txt ( o nome do arquivo obrigatóriamente é esse. )
dentro do arquivo coloque:

\begin{verbatim}
	project (tutorial1)
	find_package(KDE4 REQUIRED)
	include (KDE4Defaults)
	include_directories(${KDE4_INCLUDES})
	set(tutorial1_SRCS main.cpp)
	kde4_add_executable(tutorial1 
		${tutorial1_SRCS})
	target_link_libraries(tutorial1 
		${KDE4_KDEUI_LIBS})
	install(TARGETS tutorial1  
		${INSTALL_TARGETS_DEFAULT_ARGS})
\end{verbatim}

ignorano a parte complicada por agora, e me preocupando mais apenas com fazer o código compilar, 
project indica o nome do projeto que estamos compilando. esse código foi chupado da pagina techbase.kde.org

\begin{itemize}
	\item \emph{find\_packages} vai procurar os pacotes que são necessários a seu aplicativo. estamos utilizando os do KDE4, então procuremos por esse.
	\item \emph{include} faz a mesma coisa que um \emph{\#include} do C, chama os arquivos que são necessários.
	\item \emph{include\_directories} adiciona os diretórios para o search path do compilador.
	\item \emph{set} aqui estamos criando um pacote de código fonte que será compilado. 
	\item \emph{kde4\_add\_executable} estamos aqui indicando o que será compilado.
	\item \emph{tarkeg\_link\_libraries} indica quais serão as bibliotecas que irão ser linkadas a seu programa.
	\item \emph{install} instala o programa ( utilizando make install ) em uma pasta do computador.
\end{itemize}

perão por ir rápido na explicação do CMake, iremos pegar isso bastante logo adiante. Com esse arquivo pronto, siga os passos abaixo:
\begin{verbatim}
	mkdir build
	cd build && cmake ../
	make
\end{verbatim}

e pronto, seu programa deve estar sendo compilado. o CMake geralmente faz uma compilação bonita com numeros e cores, eu desabilitei no meu computador para ter mais controle no que está acontecendo no meu software.

\begin{center}
 linhas geradas no console pelo make
\end{center}
\begin{lstlisting}
	shiva:~/Documents/complecs/LivroC++Qt/basico/Inutil tomaz$ make
	g++ -c -pipe -g -Wall -W -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/opt/local/share/qt4-mac/mkspecs/macx-g++ -I. -I/opt/local/Library/Frameworks/QtCore.framework/Versions/4/Headers -I/opt/local/include/qt4-mac/QtCore -I/opt/local/include/qt4-mac/QtCore -I/opt/local/Library/Frameworks/QtGui.framework/Versions/4/Headers -I/opt/local/include/qt4-mac/QtGui -I/opt/local/include/qt4-mac/QtGui -I/opt/local/include/qt4-mac -I. -I. -I. -F/opt/local/Library/Frameworks -o main.o main.cpp
	g++ -headerpad_max_install_names -o Inutil.app/Contents/MacOS/Inutil main.o   -F/opt/local/Library/Frameworks -L/opt/local/Library/Frameworks -framework QtGui -L/tmp/qt-stuff/source/qt-mac-opensource-src-4.5.0-beta1/lib -F/tmp/qt-stuff/source/qt-mac-opensource-src-4.5.0-beta1/lib -framework Carbon -framework AppKit -framework QtCore -lz -lm -framework ApplicationServices
\end{lstlisting}

não se preocupe com essas linhas, na maioria dos casos elas só dizem o que está acontecendo no momento que compilam algum arquivo. é importante, entretanto, observar caso alguma linha dê erro. Vamos rodar nosso programa compilado agora.:

\begin{figure}[!hb]
  \centering
  \includegraphics[width=1in]{basico/imagens/inutil}
  \caption[Rodando Inutil]%
  {Rodano o nosso primeiro, e inutil, programa.}
	\label{fig:programa_inutil}
\end{figure}
